package Demo2_27;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User：Lenovo
 * Date:2025-02-27
 * Time:17:14
 */
// 定义二叉树节点类
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    // 构造函数，用于初始化节点的值
    TreeNode(int x) { val = x; }
}

class Solution6 {
    // 主方法，将二叉树转换为字符串
    public String tree2str(TreeNode root) {
        StringBuilder stringBuilder = new StringBuilder();
        tree2strChild(root, stringBuilder);
        return stringBuilder.toString();
    }

    // 辅助方法，递归地将二叉树的节点添加到字符串构建器中
    public void tree2strChild(TreeNode root, StringBuilder stringBuilder) {
        if (root == null) {
            return;
        }
        // 添加当前节点的值
        stringBuilder.append(root.val);
        if (root.left != null) {
            // 若左子节点不为空，添加左括号
            stringBuilder.append("(");
            // 递归处理左子树
            tree2strChild(root.left, stringBuilder);
            // 添加右括号
            stringBuilder.append(")");
        } else {
            if (root.right == null) {
                return;
            } else {
                // 左子节点为空但右子节点不为空，添加空括号
                stringBuilder.append("()");
            }
        }
        if (root.right != null) {
            // 若右子节点不为空，添加左括号
            stringBuilder.append("(");
            // 递归处理右子树
            tree2strChild(root.right, stringBuilder);
            // 添加右括号
            stringBuilder.append(")");
        } else {
            return;
        }
    }


    public static void main(String[] args) {
        // 创建示例二叉树
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);

        // 创建 Solution 类的实例
        Solution6 solution = new Solution6();
        // 调用 tree2str 方法将二叉树转换为字符串
        String result = solution.tree2str(root);
        // 输出结果
        System.out.println(result);
    }
}